[1]LeetCode刷题笔记:两数之和[S]目录[1]LeetCode刷题笔记:两数之和[S]题目描述题解参考暴力枚举复杂度分析使用哈希表复杂度分析参考题解C/C++的相关参考Rust的相关参考题目描述给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。题解参考暴力枚举最容易想到的方法是枚举数组中的每一个数x,寻找数组中是否存在target-x。当我们使用遍历整个数组的方式寻找target-x时,需要注
一、题目大意标签:动态规划https://leetcode.cn/problems/climbing-stairs假设你正在爬楼梯。需要n 阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1阶+1阶2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1阶+1阶+1阶1阶+2阶2阶+1阶提示:1二、解题思路给定n节台阶,每次可以走一步或两步,求一共有多少种方式可以走完这些台阶。这是个斐波那契数列题。定义一个数组dp,dp[i]表示走到第i阶的方法数。因为我们每次可以走一步或两步,所以第i阶可以从第
一、题目大意标签:动态规划https://leetcode.cn/problems/climbing-stairs假设你正在爬楼梯。需要n 阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1阶+1阶2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1阶+1阶+1阶1阶+2阶2阶+1阶提示:1二、解题思路给定n节台阶,每次可以走一步或两步,求一共有多少种方式可以走完这些台阶。这是个斐波那契数列题。定义一个数组dp,dp[i]表示走到第i阶的方法数。因为我们每次可以走一步或两步,所以第i阶可以从第
1.数组的旋转总结数组的旋转指的是将数组的最后若干个数提前到数组前面,数组的翻转指的是将数组的顺序颠倒。旋转可以通过多次翻转实现。数组的翻转很简单,通过双指针来实现:交换数组的第一个数和最后一个数,交换第二个数和倒数第二个数,一直到数组中间即可。2.题目记录189.轮转数组分析题意给你一个数组,将数组中的元素向右轮转 k **个位置,其中 k **是非负数。思路分析其实题目就是一个数组旋转问题,我们可以通过图片来分析一下:将上面这个数组向右轮转3个位置,其实就是:将数组的后3个元素旋转到数组前面,即:数组的旋转。前面我们讲到:数组的旋转可以通过多次数组翻转来实现:我们首先对整个数组进行翻转,然
1.数组的旋转总结数组的旋转指的是将数组的最后若干个数提前到数组前面,数组的翻转指的是将数组的顺序颠倒。旋转可以通过多次翻转实现。数组的翻转很简单,通过双指针来实现:交换数组的第一个数和最后一个数,交换第二个数和倒数第二个数,一直到数组中间即可。2.题目记录189.轮转数组分析题意给你一个数组,将数组中的元素向右轮转 k **个位置,其中 k **是非负数。思路分析其实题目就是一个数组旋转问题,我们可以通过图片来分析一下:将上面这个数组向右轮转3个位置,其实就是:将数组的后3个元素旋转到数组前面,即:数组的旋转。前面我们讲到:数组的旋转可以通过多次数组翻转来实现:我们首先对整个数组进行翻转,然
一、题目大意标签:搜索https://leetcode.cn/problems/minimum-height-trees树是一个无向图,其中任何两个顶点只通过一条路径连接。换句话说,一个任何没有简单环路的连通图都是一棵树。给你一棵包含 n 个节点的树,标记为 0 到 n-1。给定数字 n 和一个有n-1条无向边的edges 列表(每一个边都是一对标签),其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条无向边。可选择树中任何一个节点作为根。当选择节点x作为根节点时,设结果树的高度为h。在所有可能的树中,具有最小高度的树(即,min(h))被称为最小高度树。请你找到所有的最小
一、题目大意标签:搜索https://leetcode.cn/problems/minimum-height-trees树是一个无向图,其中任何两个顶点只通过一条路径连接。换句话说,一个任何没有简单环路的连通图都是一棵树。给你一棵包含 n 个节点的树,标记为 0 到 n-1。给定数字 n 和一个有n-1条无向边的edges 列表(每一个边都是一对标签),其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条无向边。可选择树中任何一个节点作为根。当选择节点x作为根节点时,设结果树的高度为h。在所有可能的树中,具有最小高度的树(即,min(h))被称为最小高度树。请你找到所有的最小
目录6283.正整数和负整数的最大计数代码6285.执行K次操作后的最大分数代码6284.使字符串总不同字符的数目相等代码6283.正整数和负整数的最大计数代码直接遍历统计即可classSolution{publicintmaximumCount(int[]nums){inta=0,b=0;for(inti=0;i0)a++;elseif(nums[i]6285.执行K次操作后的最大分数代码用最大堆即可ceil是上取整,操作数和返回值都是double,需要强转,可能会出现浮点错误,所以使用整数运算规避。ceil(a/b)=(a+b-1)/bclassSolution{publiclongmax
目录6283.正整数和负整数的最大计数代码6285.执行K次操作后的最大分数代码6284.使字符串总不同字符的数目相等代码6283.正整数和负整数的最大计数代码直接遍历统计即可classSolution{publicintmaximumCount(int[]nums){inta=0,b=0;for(inti=0;i0)a++;elseif(nums[i]6285.执行K次操作后的最大分数代码用最大堆即可ceil是上取整,操作数和返回值都是double,需要强转,可能会出现浮点错误,所以使用整数运算规避。ceil(a/b)=(a+b-1)/bclassSolution{publiclongmax
1.二维数组及滚动数组总结在二维数组num[i][j]中,每个元素都是一个数组。有时候,二维数组中的某些元素在整个运算过程中都需要用到;但是有的时候我们只需要用到前一个或者两个数组,此时我们便可以用几个数组来代替原来的二维数组来降低空间消耗。这个思维就是:滚动数组。滚动数组就是使用k个一维数组来保存原来二维数组的后k个数组,在使用的过程中通过不断更新这k个数组来达到与二维数组相同的效果。注意:滚动数组的目的是:减少空间消耗;滚动数组能够使用的前提是:每次处理时不需要访问二维数组中的所有元素,只与当前处理元素的前一个或两个数组有关,如:num[i][j]=num[i-1][j]+num[i-2]